package com.zys.dao;

import java.util.List;
import java.util.Map;

import com.zys.pojo.Role;
import com.zys.pojo.User;
import com.github.pagehelper.Page;

/**
 * 处理用户 Dao 层
 */
public interface UserDao {
  /**
   * 根据查询条件获取用户列表
   *
   * @param condition 查询条件
   * @return Page
   */
  Page<User> findByCondition(String condition);

  /**
   * 根据用户 id 查询当前用户的角色
   *
   * @param id 用户 id
   * @return 角色信息
   */
  Role findRoleByUserId(Integer id);

  /**
   * 根据 id 修改用户状态
   *
   * @param id 用户 id
   * @return 修改成功的数量
   */
  int changeStateById(Integer id);

  /**
   * 添加用户
   *
   * @param user 用户信息
   */
  void add(User user);

  /**
   * 根据 id 删除用户
   *
   * @param id 用户 id
   */
  void deleteById(Integer id);

  /**
   * 查询当前用户名是否已经存在
   *
   * @param username 用户名
   * @return 存在的数量
   */
  int findByUserName(String username);

  /**
   * 根据 id 查询用户信息
   *
   * @param id 用户 id
   * @return 用户信息
   */
  User findUserById(Integer id);

  /**
   * 修改用户信息
   *
   * @param user 修改后的用户信息
   */
  void edit(User user);

  /**
   * 查询总的用户数量
   *
   * @return 总用户数
   */
  Integer findUserTotalCount();

  /**
   * 查询指定时间内的用户新增量
   *
   * @param map { first: "起始时间值", last: "结束时间值"}
   * @return 指定时间内的用户新增量
   */
  Integer findUserCountByRegTime(Map<String, Long> map);

  /**
   * 更换用户角色 id
   *
   * @param map { uid: "用户 id", rid: "角色 id"}
   */
  void changeUserRole(Map<String, Integer> map);
}
